home *** CD-ROM | disk | FTP | other *** search
Wrap
#ifndef __ABSTRACTPROPERTY__ #define __ABSTRACTPROPERTY__ // // TAbstractDesignator is the base class of TAbstractProperty // #include "AbstractDesignator.h" //======================================================================================== // CLASS TAbstractProperty //======================================================================================== class TAbstractProperty : public TAbstractDesignator { protected: DescType fPropertyIdentifier; public: DeclareSmallClassData(TAbstractProperty, TAbstractDesignator); TAbstractProperty() : fPropertyIdentifier(typeNull) {}; virtual ~TAbstractProperty(); void IAbstractProperty(TAbstractScriptableObject* objectOfDesignation, DescType propertyIdentifier); // Basic stuff virtual DescType ObjectClass(const TAETransaction& t, Boolean recordedClass = false); virtual DescType PropertyIdentifier(); virtual Boolean DerivedFromOSLClass(const TAETransaction& t, DescType objectClass); // Other useful methods virtual void MakeKeyDataForSelf(const TAETransaction& t, DescType& keyForm, TDescriptor& keyData); // Accessors: // virtual TAbstractScriptableObject* AccessByIndex(DescType desiredClass, long index); virtual TAbstractObjectIterator* ElementIterator(const TAETransaction&); }; //======================================================================================== // class TPropertyDataDescription //======================================================================================== class TPropertyDataDescription { private: unsigned long fPropertyIdentifier; unsigned long fAdditionalInfo; unsigned long fDefaultType; unsigned long fBestType; public: TPropertyDataDescription(const TPropertyDataDescription& propertyDescription) : fPropertyIdentifier(propertyDescription.PropertyIdentifier()), fAdditionalInfo(propertyDescription.AdditionalInfo()), fDefaultType(propertyDescription.DefaultType()), fBestType(propertyDescription.BestType()) {} TPropertyDataDescription(const TPropertyDescription& propertyDescription) : fPropertyIdentifier(propertyDescription.PropertyIdentifier()), fAdditionalInfo(propertyDescription.AdditionalInfo()), fDefaultType(propertyDescription.DefaultType()), fBestType(propertyDescription.BestType()) {} TPropertyDataDescription(unsigned long propertyIdentifier, unsigned long additionalInfo, unsigned long defaultType, unsigned long bestType = typeWildCard) : fPropertyIdentifier(propertyIdentifier), fAdditionalInfo(additionalInfo), fDefaultType(defaultType), fBestType(bestType == typeWildCard ? defaultType : bestType) {} unsigned long PropertyIdentifier() const { return fPropertyIdentifier; } unsigned long AdditionalInfo() const { return fAdditionalInfo; } unsigned long DefaultType() const { return fDefaultType; } unsigned long BestType() const { return fBestType; } operator TPropertyDescription*() { return (TPropertyDescription*) this; } }; //======================================================================================== // CLASS TGenericProperty //======================================================================================== class TGenericProperty : public TAbstractProperty { private: unsigned long fAdditionalInfo; public: DeclareSmallClassData(TGenericProperty, TAbstractProperty); TGenericProperty() : fAdditionalInfo(0) {}; virtual ~TGenericProperty(); void IGenericProperty(TAbstractScriptableObject* objectOfDesignation, const TPropertyDataDescription& propertyDescription); virtual DescType BestType(const TAETransaction& t, DescType propertyName); virtual DescType DefaultType(const TAETransaction& t, DescType propertyName); virtual Boolean CanReturnDataOfType(const TAETransaction& t, DescType propertyName, DescType desiredType); unsigned long AdditionalInfo() { return fAdditionalInfo; }; virtual TDescriptor GetProperty(const TAETransaction& t, DescType propertyName, DescType desiredType, unsigned long additionalInfo = 0); virtual void SetProperty(const TAETransaction& t, DescType propertyName, TDescriptor& data, unsigned long additionalInfo = 0); }; #endif